package de.projectgoodmorning.alarm.storage;

import android.content.Context;
import android.content.SharedPreferences;

/**
 * Der IdCounter ist eine Hilfsklasse, welche eine fortlaufenden und
 * eindeutige ID Vergabe ermoeglicht.
 * 
 * Der IdCounter speichert seinen Zwischenstand ueber die SharedPreferences
 * des Android OS persistent zwischen.
 */
public class IdCounter {
	private static final String STORAGE_SLOT = "id_counter";
	private static final String CURRENT_ID = "id_counter";
	
	private int id;
	private SharedPreferences prefs;
	
	/**
	 * Erstellt ein neues IdCounter-Objekt zur Abfrage einer neuen ID
	 * @param context	erwartet ein Context-Objekt, fuer den Zugriff 
	 * 					auf die SharedPreferences, darf nicht null sein
	 */
	public IdCounter( Context context ) {
		if( context == null ) {
			throw new IllegalArgumentException( "Context object is null" );
		}
		
		prefs = context.getSharedPreferences( STORAGE_SLOT, 0 );
		id = prefs.getInt( CURRENT_ID, -1 );
		
		if( id == -1 ) {
			reset();
		}
	}
	
	/**
	 * gibt die zuletzt vergeben ID zureuck
	 */
	public int latestID() {
		return id;
	}
	
	/**
	 * gibt die naechste ID zurueck.
	 * Der Zwischenstand der ID wird persistent gespeichert.
	 * <br>
	 * <b>Wichtig:</b>
	 * Ein Zurueckspulen ist nicht moeglich.
	 */
	public int nextID() {
		id++;
		prefs.edit().putInt( CURRENT_ID, id ).commit();
		return id;
	}
	
	/**
	 * setzt den ID-Counter auf 0 zurueck.
	 */
	public void reset() {
		prefs.edit().putInt( CURRENT_ID, 0 ).commit();
		id = 0;
	}
}
